package com.example.tomatotodo;

import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.example.tomatotodo.api.ApiClient;
import com.example.tomatotodo.api.ApiService;
import com.example.tomatotodo.model.RegisterDTO; // 需创建注册DTO模型
import com.example.tomatotodo.model.Result;
import com.example.tomatotodo.util.MD5Utils;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class RegisterFragment extends Fragment {
    private EditText etUsername;    // 用户名输入框
    private EditText etPhone;       // 手机号输入框
    private EditText etPassword;    // 密码输入框
    private Button btnRegister;     // 注册按钮
    private TextView tvBack;        // 返回登录按钮

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        // 加载注册页面布局（activity_register.xml）
        View view = inflater.inflate(R.layout.activity_register, container, false);

        // 初始化控件（从activity_register.xml和include的register_input_layout.xml中获取）
        etUsername = view.findViewById(R.id.input_username);      // 用户名（来自register_input_layout）
        etPhone = view.findViewById(R.id.input_phone);            // 手机号（来自register_input_layout）
        etPassword = view.findViewById(R.id.input_password);      // 密码（来自register_input_layout）
        btnRegister = view.findViewById(R.id.btn_register);       // 注册按钮（来自activity_register）
        tvBack = view.findViewById(R.id.tv_back);                 // 返回按钮（来自activity_register）

        // 注册按钮点击事件：触发注册逻辑
        btnRegister.setOnClickListener(v -> {
            attemptRegister();
        });

        // 返回按钮点击事件：跳转回登录页面
        tvBack.setOnClickListener(v -> {
            Intent intent = new Intent(getActivity(), LoginActivity.class);
            startActivity(intent);
            requireActivity().finish(); // 关闭当前注册页
        });

        return view;
    }

    /**
     * 注册流程
     */
    private void attemptRegister() {
        // 1. 获取表单输入值
        String username = etUsername.getText().toString().trim();
        String phone = etPhone.getText().toString().trim();
        String password = etPassword.getText().toString().trim();

        // 2. 输入验证（根据后端要求调整）
        if (TextUtils.isEmpty(username)) {
            etUsername.setError("请输入用户名");
            etUsername.requestFocus();
            return;
        }
        if (TextUtils.isEmpty(phone) || phone.length() != 11) {
            etPhone.setError("请输入11位手机号");
            etPhone.requestFocus();
            return;
        }
        if (TextUtils.isEmpty(password) || password.length() < 6) {
            etPassword.setError("密码至少6位");
            etPassword.requestFocus();
            return;
        }

        // 3. 密码MD5加密（后端要求）
        String encryptedPassword = MD5Utils.md5(password);

        // 4. 构建注册请求DTO
        RegisterDTO registerDTO = new RegisterDTO();
        registerDTO.setUsername(username);
        registerDTO.setPhone(phone);
        registerDTO.setPassword(encryptedPassword); // 设置加密后的密码

        // 5. 调用注册接口
        ApiService apiService = ApiClient.getClient().create(ApiService.class);
        Call<Result<Long>> call = apiService.register(registerDTO); // 调用新增的register接口

        call.enqueue(new Callback<Result<Long>>() {
            @Override
            public void onResponse(Call<Result<Long>> call, Response<Result<Long>> response) {
                if (response.isSuccessful() && response.body() != null) {
                    Result<Long> result = response.body();
                    if (result.getCode() == 200 && result.getData() != null) {
                        // 注册成功：显示成功提示并跳转登录页
                        Toast.makeText(getActivity(), "注册成功！用户ID: " + result.getData(), Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(getActivity(), LoginActivity.class);
                        startActivity(intent);
                        requireActivity().finish(); // 关闭注册页
                    } else {
                        // 注册失败：显示后端错误信息
                        Toast.makeText(getActivity(), "注册失败: " + result.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                } else {
                    // 接口调用失败（如网络错误）
                    Toast.makeText(getActivity(), "注册失败: 网络异常", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<Result<Long>> call, Throwable t) {
                // 网络请求失败
                Toast.makeText(getActivity(), "注册失败: " + t.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}